<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
    <script>
      // 1.对象的属性简写 
      // 当对象key值和变量值相同的时候可以省略一个
      // 对象内部函数的简写 简写:function
        let myname="王德发"
        let age=18;
        let obj={
          // myname:myname,
          myname, //简写
          // age:age
          age,
          sex:"男",
          // eat:function(){}, //以前的写法
          eat(){} //简写
          // eat:()=>{}//1 简写成箭头函数
        }
        
        // 3 es6的书写 key值可以使用表达式了 [表达式]
        let str1="你好"
        let obj3={
          mycar:"奔驰",
          ["1"+str1]:2
        }
        console.log(obj3)
        // 对象的方法
        let obj4={
          color:"红色",
          door:4
        }
        //？ 1.  Object.is()比较两个值是否严格相等，与严格比较运算符（===）的行为基本一致，返回布尔值。
        // 和===的区别
        // 一是+0不等于-0
        // 二是NaN等于自身
       
          console.log(Object.is(+0,+0))
           console.log(Object.is(NaN,NaN))
           console.log(NaN===NaN)
        //2.  Object.assign(target目标，对象1，对象2)
        // ：用于对象的合并  深拷贝
        let target={name:1}
        let objk={age:2}
        let objs={sex:"男"}
        Object.assign(target,objk,objs)
        console.log(target)
        target.sex="女"
        console.log(objs.sex)
        // 面试题： 合并对象的方法有哪些
            // Object.assign()  扩展运算符... 循环对象合并
        // 3.Object.fromEntries() Object.entries()的逆操作，用于将一个键值对数组转为对象
        let arrs=[["name","张三"],["age",18],["sex","男"]]  
        let objc=Object.fromEntries(arrs)
        console.log(objc)
      // 5.链判断运算符
      // （1）语法：?.
      // （2）作用：在读取对象的属性之前先判断该对象是否存在
        let cars={
          names:"吉利",
          color:"红色",
          setting:{
            fas:"3.6T",
            door:2
          }
        }
      console.log(cars?.name)
      console.log(cars?.setting?.fa)
        
      



    </script>
</body> 
</html>